
#include "CircularBuffer.h"


//
//void CircularBuffer::clear()
//{
//	//memset(cb, 0x00, CIRCULAR_BUFFER_SIZE);//其实不赋值也无所谓
//	this->writeP = this->buffer;
//	this->readP = this->buffer;
//}
//
//size_t CircularBuffer::size()
//{
//	return  ((this->writeP - this->readP + (this->capacity() + 1)) % (this->capacity() + 1));	 
//}
//
//size_t CircularBuffer::capacity()
//{
//	return CIRCULAR_BUFFER_SIZE - 1;//内部数组不允许存满
//}
//
//
//bool CircularBuffer::append(const uint8_t* data, size_t length)
//{
//	if (length == 0)return true;
//	if (length > (this->capacity() - this->size())) return false;//超过最大长度，错误
//
//	if (this->writeP + length <= this->bufferEnd)//不需要返回开头的情况
//	{
//		memcpy(this->writeP, data, length);
//		this->writeP += length;
//	}
//	else//需要返回开头的情况
//	{
//		size_t endLength = this->bufferEnd - this->writeP + 1;//结尾部分需要拷贝的数量
//		size_t beginLength = length - endLength;//开头部分需要拷贝的数量
//		memcpy(this->writeP, data, endLength);//拷贝到后面		
//		memcpy(this->buffer, data + endLength, beginLength);//拷贝到前面
//		this->writeP = this->buffer + beginLength;
//	}
//	return true;
//}
//
//bool CircularBuffer::empty()
//{
//	return this->writeP == this->readP;
//}
//
//uint8_t* CircularBuffer::begin()
//{
//	if (this->empty()) return nullptr;//没有数据
//	
//	return this->readP;
//}
//
//uint8_t* CircularBuffer::end()
//{
//	if (this->empty()) return nullptr;//没有数据
//	size_t tailIndex = (this->readP + this->size() - 1 - this->buffer + this->capacity() + 1) % (this->capacity() + 1);
//
//	return this->buffer + tailIndex;
//}
//
//bool CircularBuffer::consume(uint8_t* rBuffer, size_t length)
//{
//	if (length == 0) return true;
//	if (length > size()) return false;//超过当前存储的长度，错误
//
//	if (this->readP + length <= this->bufferEnd)//不需要返回开头的情况
//	{
//		memcpy(rBuffer, this->readP, length);
//		this->readP += length;
//	}
//	else//需要返回开头的情况
//	{
//		size_t endLength = this->bufferEnd - this->readP + 1;//结尾部分需要拷贝的数量
//		size_t beginLength = length - endLength;//开头部分需要拷贝的数量
//		memcpy(rBuffer, this->readP, endLength);//拷贝后面的
//		memcpy(rBuffer + endLength, this->buffer, beginLength);//拷贝前面的
//		this->readP = this->buffer + beginLength;
//	}
//	return true;
//}
//
//bool CircularBuffer::eraseFront(uint8_t* it)
//{
//	if (this->empty()) return false;
//
//	if (it<this->buffer || it>this->bufferEnd) return false;//不在真实数组范围内，错误
//	size_t itMapIndex = (it - this->begin()) % (this->capacity() + 1);//指针以数据头为开头的索引
//	size_t tailMapIndex = this->size() - 1;//数据尾部，以数据头为开头的索引
//	if (itMapIndex > tailMapIndex) return false;//目标不在数据区内，错误
//
//	this->readP = it;
//	return true;
//}
//
//uint8_t* CircularBuffer::find(const uint8_t* target, size_t length)
//{
//	if (target == NULL) return nullptr;
//	if (length == 0) return this->begin();
//
//	if (length > this->size()) return nullptr;//目标长度超过当前数据长度，错误
//	
//	size_t lastBehindMapIndex = this->size() - length + 1 + 1;//虚拟数组中“最后一次比较的后一个”的索引
//	size_t lastBehindIndex = (this->readP + lastBehindMapIndex - this->buffer) % (this->capacity() + 1);//真实数组中“最后一次比较的后一个”的索引
//	uint8_t* lastBehind = this->buffer + lastBehindIndex;//真实数组中“最后一次比较的后一个”的位置。
//
//	uint8_t* it = this->readP;//遍历时的迭代器
//	
//	while (it != lastBehind)
//	{
//		//目前不涉及迭代器返回开头的情况
//		if (it + length <= this->bufferEnd)
//		{
//			if (memcmp(it, target, length) == 0)
//			{				
//				return it;
//			}
//		}
//		else
//		{
//			size_t endLength = this->bufferEnd - it + 1;//结尾部分需要比较的数量
//			size_t beginLength = length - endLength;//开头部分需要比较的数量
//			if (memcmp(it, target, endLength) == 0 && memcmp(this->buffer, target + endLength, beginLength) == 0)
//			{
//				return it;
//			}
//		}
//		it++;
//		if (it > this->bufferEnd) it = this->buffer;//超过结尾，回到开头
//	}
//
//	return nullptr;
//}
//
//#include <iostream>
//#include <iomanip> 
//void CircularBuffer::printfCircularBuffer()
//{
//	std::cout << "Size: " << this->size() << ", Capacity: " << this->capacity()
//		<< ", Empty: " << (this->empty() ? "true" : "false") << "\n";
//
//	std::cout << "buffer" << std::endl;
//	for (size_t i = 0; i < this->capacity(); ++i) {
//		// 将 uint8_t 转换为 int，并以两位十六进制输出
//		std::cout << std::hex << std::uppercase
//			<< std::setw(2) << std::setfill('0')
//			<< static_cast<int>(this->buffer[i]) << " ";
//	}
//	std::cout << std::dec << std::endl; // 恢复十进制输出格式
//
//	std::cout << "data" << std::endl;
//
//	uint8_t* it = this->begin();
//	for (size_t i = 0; i < this->size(); i++)
//	{
//		// 将 uint8_t 转换为 int，并以两位十六进制输出
//		std::cout << std::hex << std::uppercase
//			<< std::setw(2) << std::setfill('0')
//			<< static_cast<int>(*it) << " ";
//		it = it + ((it - this->buffer + 1) % (this->capacity() + 1));//下一个位置
//	}
//	std::cout << std::dec << std::endl; // 恢复十进制输出格式
//
//	std::cout << "readP index " << (this->readP - this->buffer) << std::endl;
//	std::cout << "writeP index " << (this->writeP - this->buffer) << std::endl;
//
//	std::cout << "\n\n";
//}

CircularBuffer::iterator CircularBuffer::iterator::operator+=(int a)
{
	return iterator();
}
